package qc.module.qms.service.log;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import qc.common.core.utils.IdentifierUtil;
import qc.common.core.utils.LocalDateTimeUtil;
import qc.module.qms.dto.mq.QmsMqDataFlowLogMessageDto;
import qc.module.qms.entity.QmsLogDataflow;
import qc.module.qms.mapper.QmsLogDataflowMapper;
import qc.module.qms.repository.QmsLogDataflowRepository;

import java.time.Duration;
import java.time.LocalDateTime;

/**
 * QMS流程日志，只提供日志的新增、不提供日志的修改和删除操作
 * 日志查询提供复杂查询，用于分析排查系统问题；可以按点号和时段进行查询、也可以按操作类型查询
 *
 * @author QuCheng Tech
 * @since 2025/10/9
 */
@Service
public class QmsLogDataflowService {
    private static final Logger logger = LoggerFactory.getLogger(QmsLogDataflowService.class);

    @Autowired
    private QmsLogDataflowRepository repository;

    /**
     * 新增一条流程日志
     *
     * @param message 流程消息
     * @return void
     * @author QuCheng Tech
     * @since 2025/10/9
     */
    public void addLog(QmsMqDataFlowLogMessageDto message) {
        //传入信息错误不进行保存，保存错误或失败只进行文件日志记录，不抛出错误或异常
        if (message != null) {
            QmsLogDataflow en = QmsLogDataflowMapper.MAPPER.toEntity(message);
            //如果当前节点ID为空，自动生成一个
            if (StringUtils.isBlank(en.getFlowid()))
                en.setFlowid(IdentifierUtil.simpleUUID());

            LocalDateTime now = LocalDateTimeUtil.getNow();
            //对写入时间赋值为当前时间
            en.setIntm(now);
            //如果结束时间为空赋值为当前时间
            if (en.getEndtm() == null)
                en.setEndtm(now);

            //计算步骤执行耗时
            if (en.getBegintm() != null && en.getBegintm().isAfter(en.getEndtm()) == false) {
                Duration duration = Duration.between(en.getBegintm(), en.getEndtm());
                //获取时间差的毫秒数
                Long millis = duration.toMillis();

                en.setMillis(millis);
            }

            repository.insert(en);
        }
    }

}
